package chapter07

import scala.collection.mutable

object Test16_MergeMap {

  def main(args: Array[String]): Unit = {
    /*
    *  传统map合并操作，你可以使用map1++map2来对两个map
    * 进行合并。但是这样有一个问题，如果map2有map1中没有
    * 的值，那么就会添加，如果是有相同的key，后者会将前者
    * 进行覆盖，这里就是map2覆盖map1的值，这显然是我们不想
    * 看到的
    * */

    val map1 = Map("a" -> 1, "b" -> 3)
    val map2 = mutable.Map("a" -> 13, "b" -> 23, "c" -> 3)

  // 将初始值定义给map2
  val stringToInt: mutable.Map[String, Int] = map1.foldLeft(map2)(
    (mergedMap, kv) => {
      val key: String = kv._1
      val value: Int = kv._2
      //        if(mergedMap.contains(key)){
      //          //相同就累加
      //          mergedMap.put(key,mergedMap(key)+value)
      //        }else{
      //          // 否则直接添加
      //          mergedMap += ((key,value))
      ////          mergedMap.put(key, value)
      //        }
      mergedMap(key) = mergedMap.getOrElse(key, 0) + value
      mergedMap
    }
  )

    println(stringToInt)
  }

}
